package com.dynamixsoftware.printershare.ipp;

public class Base64
{
  private static char[] map1 = new char[64];
  private static byte[] map2;
  
  static
  {
	  int var1;
      int var15;
      char var0 = 65;
      for(var1 = 0; var0 <= 90; var1 = var15) {
         char[] var14 = map1;
         var15 = var1 + 1;
         var14[var1] = var0++;
      }

      int var13;
      for(char var2 = 97; var2 <= 122; var1 = var13) {
         char[] var12 = map1;
         var13 = var1 + 1;
         var12[var1] = var2++;
      }

      int var11;
      for(char var3 = 48; var3 <= 57; var1 = var11) {
         char[] var10 = map1;
         var11 = var1 + 1;
         var10[var1] = var3++;
      }

      char[] var4 = map1;
      int var5 = var1 + 1;
      var4[var1] = 43;
      char[] var6 = map1;
      int var10000 = var5 + 1;
      var6[var5] = 47;
      map2 = new byte[128];

      for(int var8 = 0; var8 < map2.length; ++var8) {
         map2[var8] = -1;
      }

      for(int var9 = 0; var9 < 64; ++var9) {
         map2[map1[var9]] = (byte)var9;
      }

  }
  
  public static byte[] decode(String paramString)
  {
    return decode(paramString.toCharArray());
  }
  public static byte[] decode(char[] var0) {
      int var1 = var0.length;
      if(var1 % 4 != 0) {
         throw new IllegalArgumentException("Length of Base64 encoded input string is not a multiple of 4.");
      } else {
         while(var1 > 0 && var0[var1 - 1] == 61) {
            --var1;
         }

         int var2 = var1 * 3 / 4;
         byte[] var3 = new byte[var2];
         int var4 = 0;
         int var5 = 0;

         while(var5 < var1) {
            int var6 = var5 + 1;
            char var7 = var0[var5];
            int var8 = var6 + 1;
            char var9 = var0[var6];
            char var10;
            if(var8 < var1) {
               int var23 = var8 + 1;
               var10 = var0[var8];
               var8 = var23;
            } else {
               var10 = 65;
            }

            char var11;
            int var12;
            if(var8 < var1) {
               var12 = var8 + 1;
               var11 = var0[var8];
            } else {
               var11 = 65;
               var12 = var8;
            }

            if(var7 <= 127 && var9 <= 127 && var10 <= 127 && var11 <= 127) {
               byte var13 = map2[var7];
               byte var14 = map2[var9];
               byte var15 = map2[var10];
               byte var16 = map2[var11];
               if(var13 >= 0 && var14 >= 0 && var15 >= 0 && var16 >= 0) {
                  int var17 = var13 << 2 | var14 >>> 4;
                  int var18 = (var14 & 15) << 4 | var15 >>> 2;
                  int var19 = var16 | (var15 & 3) << 6;
                  int var20 = var4 + 1;
                  var3[var4] = (byte)var17;
                  int var21;
                  if(var20 < var2) {
                     var21 = var20 + 1;
                     var3[var20] = (byte)var18;
                  } else {
                     var21 = var20;
                  }

                  int var22;
                  if(var21 < var2) {
                     var22 = var21 + 1;
                     var3[var21] = (byte)var19;
                  } else {
                     var22 = var21;
                  }

                  var4 = var22;
                  var5 = var12;
                  continue;
               }

               throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
            }

            throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
         }

         return var3;
      }
   }

  
  public static String decodeString(String paramString)
  {
    return new String(decode(paramString));
  }
  
  public static char[] encode(byte[] paramArrayOfByte)
  {
    return encode(paramArrayOfByte, paramArrayOfByte.length);
  }
  public static char[] encode(byte[] var0, int var1) {
      int var2 = (2 + var1 * 4) / 3;
      char[] var3 = new char[4 * ((var1 + 2) / 3)];
      int var4 = 0;

      int var10;
      for(int var5 = 0; var5 < var1; var5 = var10) {
         int var6 = var5 + 1;
         int var7 = 255 & var0[var5];
         int var8;
         int var9;
         if(var6 < var1) {
            var8 = var6 + 1;
            var9 = 255 & var0[var6];
         } else {
            var8 = var6;
            var9 = 0;
         }

         int var11;
         if(var8 < var1) {
            var10 = var8 + 1;
            var11 = 255 & var0[var8];
         } else {
            var10 = var8;
            var11 = 0;
         }

         int var12 = var7 >>> 2;
         int var13 = (var7 & 3) << 4 | var9 >>> 4;
         int var14 = (var9 & 15) << 2 | var11 >>> 6;
         int var15 = var11 & 63;
         int var16 = var4 + 1;
         var3[var4] = map1[var12];
         int var17 = var16 + 1;
         var3[var16] = map1[var13];
         char var18;
         if(var17 < var2) {
            var18 = map1[var14];
         } else {
            var18 = 61;
         }

         var3[var17] = var18;
         int var19 = var17 + 1;
         char var20;
         if(var19 < var2) {
            var20 = map1[var15];
         } else {
            var20 = 61;
         }

         var3[var19] = var20;
         var4 = var19 + 1;
      }

      return var3;
   }

  public static String encodeString(String paramString)
  {
    return new String(encode(paramString.getBytes()));
  }
}

